{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  1.试画图说明极线几何关系，并指出极点、极线所在，解释极线约束。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "答：极线几何关系如下图：\n",
    "![image][q1]\n",
    "极线约束是指匹配点必须在极线上。\n",
    "\n",
    "[q1]:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2.结合本质矩阵的定义，说明本质矩阵的意义，同时思考与上一周中平面点对应透视矩阵的区别。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "答：本质矩阵是平移矩阵的反对称矩阵和旋转矩阵的点积。透视变换是从某个投射中心将原图像平面上的信息投射到另一图像平面上。透视矩阵的作用是实现从源平面到新图像平面的转换。而本质矩阵的作用是将空间点在两个投影平面上的投影点对应起来"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# 3说明三维重构的步骤，并指出输入及输出要求。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "答：三维重构的步骤：\n",
    "1. 提取特征点，建立特征匹配：输入为两张不同位置拍摄的图像，输出为特征对应关系\n",
    "2. 计算视差：输入为第一步的特征对应关系，输出为图像的视差\n",
    "3. 计算世界坐标：输入为第二部特征点比较好的三维坐标，形成点云数据，输出为世界坐标\n",
    "4. 三角剖分： Delauney算法：输入为点云数据，输出为对应的很多三角形\n",
    "5. 三维重构：利用openGL，将第四步的三角形绘制出三维重构模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# 4说明特征匹配的步骤，进一步说明基于k-d树的特征匹配方法的思路。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "答：特征匹配步骤：\n",
    "1. 输入图像\n",
    "2. SIFT特征点检测\n",
    "3. 特征点描述\n",
    "4. 特征点匹配和滤波\n",
    "5. 识别结果\n",
    "k-d树可以看作为是一个多维的二叉搜索树。对于每一层，可以制定一个划分维度。在建立k-d树时，从根节点到叶子节点的维度依次选取方差从大到小的维度。选定划分纬度后，再选取正中间的那个值作为节点。 在查询k-d树时，可采用最近邻查询算法，BBF算法，随机化k-d森林算法。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5. 说明RANSAC方法的基本思想及实施步骤"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "答：当出现错误匹配或者出现噪声时，我们仍能得到正确的结果。 RANSAC方法基本思想是通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点，并用下述方法进行验证：\n",
    "1. 有一个模型适应于假设的局内点，即所有的位置参数都能从假设的局内点计算得出。\n",
    "2. 用1中得到的模型去测试所有的其他数据，如果某个点适用于估计的模型，认为它也是局内点。\n",
    "3. 如果有足够多的点被归类为假设的局内点，那么估计的模型就足够合理。\n",
    "4. 然后用所有假设的局内点去重新估计模型，因为它仅仅被初始的假设局内点估计过。\n",
    "5. 最后，通过估计局内点与模型的错误率来评估模型。\n",
    "这个过程被重复执行一定的次数，每次产生的模型要么因为局内点太少而被舍弃，要么因为比现有的模型更好而被选用。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
